package de.guerda.matekarte.dealers; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; public class DealersListDeserializer implements JsonDeserializer<DealersList> { public static void main(String[] args) throws IOException { InputStream tmpStream = DealersListDeserializer.class.getClassLoader().getResourceAsStream("testfile.json"); InputStreamReader tmpReader = new InputStreamReader(tmpStream); GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(DealersList.class, new DealersListDeserializer()); Gson gson = builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); DealersList tmpFromJson = gson.fromJson(tmpReader, DealersList.class); List<Dealer> tmpDealers = tmpFromJson.getDealers(); for (Dealer tmpDealer : tmpDealers) { System.out.println(tmpDealer); } } public DealersList deserialize(JsonElement element, Type arg1, JsonDeserializationContext context) throws JsonParseException { JsonObject tempJsonObject = element.getAsJsonObject(); List<Dealer> tempDealers = new ArrayList<Dealer>(); for (Entry<String, JsonElement> entry : tempJsonObject.entrySet()) { String tmpId = entry.getKey(); JsonElement tmpValue = entry.getValue(); JsonArray tmpAsJsonArray = tmpValue.getAsJsonArray(); String tmpName = tmpAsJsonArray.get(0).getAsString(); double tmpLat = tmpAsJsonArray.get(1).getAsDouble(); double tmpLon = tmpAsJsonArray.get(2).getAsDouble(); Dealer tempDealer = new Dealer(); tempDealer.setId(tmpId); tempDealer.setName(tmpName); tempDealer.setLatitude(tmpLat); tempDealer.setLongitude(tmpLon); tempDealers.add(tempDealer); } return new DealersList(tempDealers); } }